package hot100;


/*
 * Author：江松
 * Date：2023/4/16 9:46
 *
 删除链表的倒数第n个节点：
 1,1次遍历统计总数，计算出倒数位置进行删除
 2，快慢指针
 */

public class Main19 {
     public class ListNode {
    int val;
    ListNode next;
    ListNode() {}
    ListNode(int val) { this.val = val; }
    ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}


    public ListNode removeNthFromEnd(ListNode head, int n) {
         ListNode fast=head,slow=head;
         //有可能删除头节点，因此使用辅助头
         ListNode newHead=new ListNode();
         ListNode pre=newHead;
         newHead.next=head;
         while(fast!=null&&n-->0){
             fast=fast.next;
         }
         while(fast!=null){
             fast=fast.next;
             pre=slow;
             slow=slow.next;
         }
         pre.next=pre.next.next;
         return newHead.next;
    }
}
